package com.pipi.utils.sql;

import java.text.ParseException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.pipi.utils.PIPIUtils;

/**
 * 查询参数封装类，继承自LinkedHashMap用于存储键值对参数，并提供日期范围处理功能
 * <p>自动处理传入参数中的startDate和endDate字符串，转换为Date类型并设置合理默认值</p>
 */
public class Query extends LinkedHashMap<String, Object> {
	private static final long serialVersionUID = 1L;

	/**
	 * 创建空参数集合的默认构造函数
	 */
	public Query() {
	}

	/**
	 * 通过Map参数构造查询对象，自动处理日期范围
	 * @param params 原始参数集合，需包含startDate/endDate的字符串值（格式需符合PIPIUtils解析要求）
	 * @throws ParseException 当日期字符串格式不符合解析要求时抛出
	 */
	public Query(Map<String, Object> params) throws ParseException {
		// 初始化基础参数
		this.putAll(params);

		// 提取日期参数原始值
		String s = (String) params.get("startDate");
		String e = (String) params.get("endDate");

		Date startDate = null;
		Date endDate = null;

		// 处理开始日期：有值则解析，无值取当天
		if (StringUtils.isNotBlank(s)) {
			startDate = PIPIUtils.getDate(s);
		} else {
			startDate = PIPIUtils.getCurrentDay();
		}

		// 处理结束日期：有值则解析并+1天，无值取次日
		if (StringUtils.isNotBlank(e)) {
			endDate = PIPIUtils.getDate(e);
			endDate = PIPIUtils.getNextDay(endDate);
		} else {
			endDate = PIPIUtils.getCurrentDay();
			endDate = PIPIUtils.getNextDay(endDate);
		}

		// 存储处理后的日期对象
		this.put("startDate", startDate);
		this.put("endDate", endDate);
	}
}
